/**
 * AT命令层
 *  1. 接收ESP8266模块发来的命令，调用串口发出去
 *  2. 从串口接收数据，根据数据内容从路由选择分发给ESP8266模块
 */
var log = require("./nlog.js");
var Uart = require("./uart.js");
var utils = require("./utils.js")
var events = require("events");

function AT() {
    var rtn = {};
    var uartDev = Uart();
    rtn.event = new events();       // 通过事件将AT接到的数据返回给调用AT的文件

    // 模仿django写的路由选择
    function SelectRoute(uartMsg) {
        for (var key in routeDic) {
            if (uartMsg.indexOf(key) != -1) {
                routeDic[key]();
                return 0;
            }
        }
        return -1;
    }
    
    // 串口收到的数据中有OK
    function OK() {
        rtn.event.emit("OK");
    }
    
    // 串口收到的数据中有ERROR
    function ERROR() {
        rtn.event.emit("ERROR", );
    }

    // 串口收到的数据中有Busy p
    function BUSY_P() {
        rtn.event.emit("BUSY_P");
    }
    
    // 路由列表
    var routeDic = {
        "OK\r\n": OK,
        "ERROR\r\n": ERROR,
        "busy p": BUSY_P
    };
    
    // 写单条AT命令
    rtn.WriteATCmd = function (cmdStr) {
        log.a("WriteATCmd: " + cmdStr);
        uartDev.WriteStr(cmdStr);
    }


    // 开启串口接收功能
    uartDev.event.on("UART_RECV", function (uartMsg) {
        uartMsg = utils.ArrayToString(uartMsg)
        // log.a("UART_RECV " + uartMsg);
        var ret = SelectRoute(uartMsg);
        if (ret == -1) {    // 路由选择失败，说明不是AT返回的信息
            rtn.event.emit("UART_RECV", uartMsg);
        }
    });

    return rtn;
}

module.exports = AT;